﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Onshi.POS.Formularios.Recursos
{
    public partial class DecimalDesdeHasta : UserControl
    {
        #region Clases

        private class Item
        {
            private EnumTipo id;
            private String nombre;

            public String Nombre
            {
                get { return nombre; }
                set { nombre = value; }
            }

            public EnumTipo Id
            {
                get { return id; }
                set { id = value; }
            }
        }

        #endregion

        #region Constructores

        public DecimalDesdeHasta()
        {
            InitializeComponent();
        }

        #endregion

        #region Atributos

        private enum EnumTipo { Todos = 0, Igual = 1, Menor = 2, MenorIgual = 3, Mayor = 4, MayorIgual = 5, Entre = 6 }
        public delegate void CambioValorHandler();
        public event CambioValorHandler CambioValor = delegate { };

        #endregion

        #region Propiedades

        public Decimal Desde
        {
            get
            {
                var desde = Decimal.MinValue;
                switch ((EnumTipo)cboTipo.SelectedValue)
                {
                    case EnumTipo.Todos:
                        desde = Decimal.MinValue;
                        break;
                    case EnumTipo.Igual:
                        desde = numDesde.Value;
                        break;
                    case EnumTipo.Menor:
                        desde = Decimal.MinValue;
                        break;
                    case EnumTipo.MenorIgual:
                        desde = Decimal.MinValue;
                        break;
                    case EnumTipo.Mayor:
                        desde = numDesde.Value + 0.0001M;
                        break;
                    case EnumTipo.MayorIgual:
                        desde = numDesde.Value;
                        break;
                    case EnumTipo.Entre:
                        desde = numDesde.Value;
                        break;
                }
                return desde;
            }
        }

        public Decimal Hasta
        {
            get
            {
                var hasta = Decimal.MaxValue;
                switch ((EnumTipo)cboTipo.SelectedValue)
                {
                    case EnumTipo.Todos:
                        hasta = Decimal.MaxValue;
                        break;
                    case EnumTipo.Igual:
                        hasta = numDesde.Value;
                        break;
                    case EnumTipo.Menor:
                        hasta = numDesde.Value - 0.0001M;
                        break;
                    case EnumTipo.MenorIgual:
                        hasta = numDesde.Value;
                        break;
                    case EnumTipo.Mayor:
                        hasta = Decimal.MaxValue;
                        break;
                    case EnumTipo.MayorIgual:
                        hasta = Decimal.MaxValue;
                        break;
                    case EnumTipo.Entre:
                        hasta = numHasta.Value;
                        break;
                }
                return hasta;
            }
        }

        #endregion

        #region Eventos

        private void DecimalDesdeHasta_Load(Object sender, EventArgs e)
        {
            //TODO: BORRAR ESTO
            //numDesde.Numeros = numHasta.Numeros = NumeroDecimal.EnumNumeros.Todos;
            //var listado = new List<Item>();
            //listado.Add(new Item() { Id = EnumTipo.Todos, Nombre = "[Todos]" });
            //listado.Add(new Item() { Id = EnumTipo.Igual, Nombre = "Igual" });
            //listado.Add(new Item() { Id = EnumTipo.Menor, Nombre = "Menor" });
            //listado.Add(new Item() { Id = EnumTipo.MenorIgual, Nombre = "Menor o igual" });
            //listado.Add(new Item() { Id = EnumTipo.Mayor, Nombre = "Mayor" });
            //listado.Add(new Item() { Id = EnumTipo.MayorIgual, Nombre = "Mayor o igual" });
            //listado.Add(new Item() { Id = EnumTipo.Entre, Nombre = "Entre" });
            //cboTipo.DataSource = listado;
        }

        private void numDesde_ValueChanged(Object sender, EventArgs e)
        {
            if (numDesde.Enabled)
                CambioValor();
        }

        private void numHasta_ValueChanged(Object sender, EventArgs e)
        {
            if (numHasta.Enabled)
                CambioValor();
        }

        #endregion

        #region Metodos

        public void Actualizar()
        {
            numDesde.Numeros = numHasta.Numeros = NumeroDecimal.EnumNumeros.Todos;
            var listado = new List<Item>();
            listado.Add(new Item() { Id = EnumTipo.Todos, Nombre = "[Todos]" });
            listado.Add(new Item() { Id = EnumTipo.Igual, Nombre = "Igual" });
            listado.Add(new Item() { Id = EnumTipo.Menor, Nombre = "Menor" });
            listado.Add(new Item() { Id = EnumTipo.MenorIgual, Nombre = "Menor o igual" });
            listado.Add(new Item() { Id = EnumTipo.Mayor, Nombre = "Mayor" });
            listado.Add(new Item() { Id = EnumTipo.MayorIgual, Nombre = "Mayor o igual" });
            listado.Add(new Item() { Id = EnumTipo.Entre, Nombre = "Entre" });
            cboTipo.DataSource = listado;
        }

        public void LimpiarCampos()
        {
            cboTipo.SelectedIndex = 0;
            numDesde.Value = 0;
            numHasta.Value = 0;
        }

        #endregion

        private void cboTipo_SelectionChangeCommitted(object sender, EventArgs e)
        {
            switch ((EnumTipo)cboTipo.SelectedValue)
            {
                case EnumTipo.Todos:
                    numDesde.Enabled = numHasta.Enabled = false;
                    break;
                case EnumTipo.Igual:
                case EnumTipo.Menor:
                case EnumTipo.MenorIgual:
                case EnumTipo.Mayor:
                case EnumTipo.MayorIgual:
                    numDesde.Enabled = true;
                    numHasta.Enabled = false;
                    break;
                case EnumTipo.Entre:
                    numDesde.Enabled = numHasta.Enabled = true;
                    break;
            }
            CambioValor();
        }
    }
}
